package rs.ac.uns.ftn.informatika.mbs2.e11031.etaksi.entitet;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;

@SuppressWarnings("serial")
@Entity
@Table(name = "putnik")
@NamedQuery(name = "ukupnaCenaKoriscenihUsluga", query = "select coalesce(sum(v.cena), 0) from Voznja v where v.putnik.id = :putnikId and v.odrediste is not null")
public class Putnik extends Korisnik {

	@Transient
	private Double ukupnaCenaKoriscenihUsluga;

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "putnik")
	private Set<Voznja> voznje = new HashSet<Voznja>();

	public void add(Voznja v) {
		if (v.getPutnik() != null)
			v.getPutnik().getVoznje().remove(v);
		v.setPutnik(this);
		voznje.add(v);
	}

	public void remove(Voznja v) {
		v.setPutnik(null);
		voznje.remove(v);
	}

	public Putnik() {
		super();
	}

	public Putnik(long jmbg, String ime, String prezime, String korisnickoIme,
			String lozinka) {
		super(jmbg, ime, prezime, korisnickoIme, lozinka);
	}

	public Double getUkupnaCenaKoriscenihUsluga() {
		return ukupnaCenaKoriscenihUsluga;
	}

	public void setUkupnaCenaKoriscenihUsluga(Double ukupnaCenaKoriscenihUsluga) {
		this.ukupnaCenaKoriscenihUsluga = ukupnaCenaKoriscenihUsluga;
	}

	public Set<Voznja> getVoznje() {
		return voznje;
	}

	public void setVoznje(Set<Voznja> voznje) {
		this.voznje = voznje;
	}

	@Override
	public String toString() {
		return "Putnik [ukupnaCenaKoriscenihUsluga="
				+ ukupnaCenaKoriscenihUsluga + ", id=" + id + ", jmbg=" + jmbg
				+ ", ime=" + ime + ", prezime=" + prezime + ", korisnickoIme="
				+ korisnickoIme + ", lozinka=" + lozinka + "]";
	}

}
